home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2002 November / SGI Freeware 2002 November - Disc 2.iso / dist / fw_glimpse.idb / usr / freeware / src / glimpse-3.0 / agrep / io.c.z / io.c
C/C++ Source or Header  |  1997-09-09  |  1KB  |  58 lines

  1. /* Copyright (c) 1994 Sun Wu, Udi Manber, Burra Gopal.  All Rights Reserved. */
  2. #include "agrep.h"
  3.  
  4. /* AGREP_POINTER must be defined to be 1 always */
  5. /* #define AGREP_POINTER    1 */
  6. /* Removed since we now have a -DAGREP_POINTER=1 option in the Makefile */
  7.  
  8. fill_buf(fd, buf, record_size)
  9. int fd, record_size; 
  10. unsigned char *buf;
  11. {
  12.     int num_read=1;
  13.     int total_read=0;
  14.  
  15.     if (fd >= 0) {
  16.         while(total_read < record_size && num_read > 0) {
  17.             num_read = read(fd, buf+total_read, record_size - total_read);
  18.             total_read = total_read + num_read;
  19.         }
  20.     }
  21. #if    AGREP_POINTER
  22.     else return 0;    /* should not call this function if buf is a pointer to a user-specified region! */
  23. #else    /*AGREP_POINTER*/
  24.     else {    /* simulate a file */
  25.         total_read = (record_size > (agrep_inlen - agrep_inpointer)) ? (agrep_len - agrep_inpointer) : record_size;
  26.         memcpy(buf, agrep_inbuffer + agrep_inpointer, total_read);
  27.         agrep_inpointer += total_read;
  28.     }
  29. #endif    /*AGREP_POINTER*/
  30.     return(total_read);
  31. }
  32.  
  33. /*
  34.  * In these functions no allocs/copying is done when
  35.  * fd == -1, i.e., agrep is called to search within memory.
  36.  */
  37.  
  38. alloc_buf(fd, buf, size)
  39.     int fd;
  40.     char **buf;
  41.     int size;
  42. {
  43. #if    AGREP_POINTER
  44.     if (fd != -1)
  45. #endif    /*AGREP_POINTER*/
  46.         *buf = (char *)malloc(size);
  47. }
  48.  
  49. free_buf(fd, buf)
  50.     int fd;
  51.     char *buf;
  52. {
  53. #if    AGREP_POINTER
  54.     if (fd != -1)
  55. #endif    /*AGREP_POINTER*/
  56.         free(buf);
  57. }
  58.